iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0
AI Engineering

30 天從資料處理、分析到生成式 AI 的整合應用與實作學習系列 第 4

資料讀進來了,所以到底能分析什麼?

  • 分享至 

  • xImage
  •  

今天參考根據睡眠資料 AI 推薦的可分析方向,再合併自己希望可以使用的功能,先定出四個我比較想知道的分析:
睡眠時數如何變化?
睡眠品質好的平均睡眠時數是多少?
任務量與入睡時間的關系?
任務難度與睡眠品質的關系?
例如,如果之後發現任務比較多的時候,我通常會比較晚睡,或是入睡時間晚於平均睡眠時間時,之後在做提醒功能時,就可以把這些分析結果當成其中一個參考。

整理程式架構

隨著這幾天加入的功能越來越多,我發現如果全部都寫在 Main.java 裡面,程式碼會開始變得很長,也比較難知道每一段到底在負責什麼。
所以打算把不同的功能分開,讓自己在編輯的時候可以比較清楚每個檔案負責的工作。
目前的專案大致分成:
專案根目錄

├── Main.java
├── SleepRecord.java
├── SleepRepository.java
├── SleepDataLoader.java
└── SleepAnalyzer.java
例如 SleepDataLoader 的工作就是把 CSV 資料讀進來;SleepRecord 負責表示每一筆睡眠資料;真正要計算平均睡眠時數或分析睡眠變化時,就交給 SleepAnalyzer。
這樣 Main.java 就不用塞入所有讀取、處理和分析的程式碼,而是負責組織串聯。

遇到的困難

1.到底要怎麼從主程式拆開?
之前有做過類似的架構,但當時主要是跟著老師做,對概念沒有很深的理解,比較偏向按照既有的方式去完成。所以先以功能來區分,包含負責讀取、記錄、分析...。
一開始會覺得現在分析的內容也沒有很多,拆成這麼多檔案好像有點麻煩,如果全部寫在 Main.java 裡好像也可以。但隨著想做的功能增加,如果讀取 CSV、處理資料、計算結果全部混在一起,之後想修改其中一個功能時,就會比較難找到。雖然目前的資料量還很少,但清楚的框架方便日後修改和新增功能。
2.跨夜時間的問題
另外,在實際進行分析的時候,我遇到了一個原本建立 CSV 資料時沒有想到的問題。
原本的資料中有這些入睡時間:
23:50
00:30
01:20
02:10
跑出來結果顯示23:50 會比 02:10 大,而結果會顯示 23:50 判斷成比較晚睡,但以實際時間來說02:10 才是比較晚睡。這樣在分析「任務量與入睡時間的關系」的時候,就可能導致結果出錯。因此我在 SleepRecord 中將時間直接轉成分鐘來處理,讓這些時間可以用同一個基準比較。
這是我原本在設計 CSV 資料時沒有特別想到的地方,直到真的開始進行分析,才發現時間資料不能直接拿來比較。

實作結果

處理完資料與時間的問題後,目前已經可以透過 SleepAnalyzer 跑出前面設定的四項分析。
https://ithelp.ithome.com.tw/upload/images/20260917/201842359pPQh0XadD.png
目前雖然已經可以跑出分析結果,但現在使用的 CSV 資料基本上都是完整然後格式正確的。實際的資料不一定會這麼乾淨,可能會出現 N/A、空白、格式錯誤或其他異常資料。
所以下一步,我想先回到資料本身,嘗試前天提到的資料清理(Data Cleaning),了解如何判斷與處理,再進行後續的分析。


上一篇
把資料丟給 AI 就叫資料分析嗎?
下一篇
原來清理資料前,需要想這麼多!?
系列文
30 天從資料處理、分析到生成式 AI 的整合應用與實作學習10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言